/***********************************************************************************************************************
 * ############################################# Application AdewebLite #############################################
 * AdewebLite Android est une application permettant de consulter des emplois du temps fournis par l'université UHP
 * avec ou sans connexion internet (informations gardées en mémoire à chaque synchronisation). Et utilisant la web
 * API ADE pour collecter les données.
 * @author Andrianjafintrimo Victor, Zanette Sébastien
 * 
 * Basée sur l'application du même nom, utilisant le flux RSS (données à traiter), de :
 * @author Schnell Michaël, Zanette Sébastien
 * **********************************************************************************************************************
 */

package ade.schedule;

import ade.main.R;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Défini la structure de la vue de la liste d'un emploi du temps.
 * Chaque ligne affiche l'icone de niveau de synchronisation de l'emploi du temps et son nom.
 * @author Seb
 */
public class ScheduleListAdapter extends BaseAdapter {
	
	public static final int[] ICON_ID = {
		R.drawable.status_other,
		R.drawable.status_not_updated,
		R.drawable.status_waiting_for_update,
		R.drawable.status_updating,
		R.drawable.status_updated
	} ;

	protected ArrayList<String> scheduleNames ;
	
	protected LayoutInflater inflater ;

        /**
         * Initialise l'adaptateur de la liste d'emploi du temps.
         * @param context
         * @param scheduleNames 
         */
	public ScheduleListAdapter(Context context, String[] scheduleNames) {
		super() ;
		this.scheduleNames = new ArrayList<String>(scheduleNames.length) ;
		for(String name : scheduleNames) {
			this.scheduleNames.add(name) ;
		}// for
		this.inflater = LayoutInflater.from(context) ;
	}

        /**
         * Cette méthode permet de connaitre le nombre d'items présent dans la liste.
         * @return nombre d'items présent dans la liste
         */
	public int getCount() {
		return this.scheduleNames.size() ;
	}

        /**
         * Permet de retourner un objet contenu dans la liste à l'indice passé en paramètre.
         * @param position index dans la liste d'emploi du temps
         * @return objet contenu dans la liste à l'indice index
         */
	public String getItem(int position) {
		return this.scheduleNames.get(position) ;
	}

        /**
         * Retourne l'id d'un élément dans la liste à l'indice passé en paramètre.
         * @param position index dans la liste d'emploi du temps
         * @return id d'un élément dans la liste à l'indice index
         */
	public long getItemId(int position) {
		return position ;
	}

        /**
         * Retourne la vue d'une ligne de la liste (Icone du niveau de synchronisation, nom de l'emploi du temps).
         * @param position index dans la liste d'emploi du temps
         * @param contentView vue
         * @param parent Vue parente
         * @return vue d'une ligne de la liste
         */
	public View getView(int position, View contentView, ViewGroup parent) {
		View v = contentView ;
		if (v == null) {
			v = this.inflater.inflate(R.layout.schedule_listitem, null) ;
		}// if
		
		String scheduleName = this.scheduleNames.get(position) ;
		TextView name = (TextView) v.findViewById(R.id.schedule_name) ;
		name.setText(scheduleName) ;
		ImageView icon = (ImageView) v.findViewById(R.id.schedule_status) ;
		icon.setImageResource(ScheduleListAdapter.ICON_ID[UpdateManager.getInstance().getScheduleStatus(scheduleName)]) ;
                
                ImageView change = (ImageView) v.findViewById(R.id.changeSchedule) ;
                        //if(l.getChange() == Lesson.BIG_CHANGE)
                            change.setVisibility(ImageView.VISIBLE);
                        //else
                            //change.setVisibility(ImageView.INVISIBLE);
		
		return v ;
	}

}
